From 5286eff6735f19f55553ee7af0d76dfb7ee8d24d Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Sat, 26 Mar 2011 09:30:04 +0000 Subject: [PATCH] x86: fix tboot after c/s 23013:65d26504e843 (ACPI cleanup) TXT code calls acpi_parse_dmar() with a transient copy of the DMAR table, and hence storing the pointer for later reference was wrong. Obtain the pointer in acpi_dmar_init() instead. Signed-off-by: Jan Beulich Tested-by: Gang Wei --- xen/drivers/passthrough/vtd/dmar.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xen/drivers/passthrough/vtd/dmar.c b/xen/drivers/passthrough/vtd/dmar.c index d0e2877ba5..2a06eef7d8 100644 --- a/xen/drivers/passthrough/vtd/dmar.c +++ b/xen/drivers/passthrough/vtd/dmar.c @@ -673,7 +673,6 @@ static int __init acpi_parse_dmar(struct acpi_table_header *table) u8 dmar_host_address_width; int ret = 0; - dmar_table = table; dmar = (struct acpi_table_dmar *)table; if ( !iommu_enabled ) @@ -762,6 +761,13 @@ out: int __init acpi_dmar_init(void) { + unsigned long flags; + + /* Disabling IRQs avoids cross-CPU TLB flush in map_pages_to_xen(). */ + local_irq_save(flags); + acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table); + local_irq_restore(flags); + return parse_dmar_table(acpi_parse_dmar); } -- 2.30.2